import axios from 'axios'
import { Message } from 'element-ui'
import store from '@/store'
import router from '@/router'

const Myaxios = axios.create({
  baseURL: 'http://127.0.0.1:3029'
})

// 请求拦截器
Myaxios.interceptors.request.use(function (config) {
  // config配置对象（要请求后台的参数都在这个对象上
  // 在请求前会触发一次，这个return交给axios源码内，会根据配置项发起请求
  if (store.state.token) {
    config.headers.Authorization = store.state.token
  }
  config.headers['Content-Type'] = 'application/x-www-form-urlencoded'
  return config
}, function (error) {
  // 请求前发起的代码，如果发生异常，会直接进入这里
  // 返回一个拒绝状态的promise对象（axios留在原地的promise对象状态就为失败结果的error变量值）
  // 此函数类似于catch函数的return
  return Promise.reject(error)
})

// 响应拦截器
Myaxios.interceptors.response.use(function (response) {
  // 响应状态码为2xx 3xx 时触发成功的回调。形参中的response时成功的结果
  // return到axios有底Promise对象，作为成功的结果
  return response
}, function (error) {
  // 响应状态码为4xx 5xx 时触发失败的回调，形参中的error是失败的结果
  // return到axios原地promise对象位置。作为失败拒绝的状态
  if (error.response.status === 401) {
    // 如果token过期 则清楚token
    Message.error('用户身份已过期，请重新登录！')
    store.commit('getToken', '')
    router.push('/login')
  }
  return Promise.reject(error)
})

export default Myaxios
